/*
 * @Descripttion: Lutongli代码
 * @version: 1.0.0
 * @Author: LutongLi
 * @Date: 2025-05-31 02:03:15
 * @LastEditTime: 2025-06-03 02:19:29
 */
package impl

import (
	"context"
	"fmt"

	// "golang.org/x/net/context"

	"gitee.com/king_max/restful-api-demo/apps/host"
)

//完成对象与数据库之间的转换

//把host对象保存到数据库中
func (i *HostServiceImpl) save(ctx context.Context,ins *host.Host)error{
	var (
		err error
	)
	tx,err := i.db.BeginTx(ctx,nil)
	if err !=nil{
		return fmt.Errorf("start tx error,%s",err)
	}

	// 1.无报错，则commit事务
	// 2.有报错，则rollback事务
	defer func(){
		if err != nil{
			if err := tx.Rollback();err !=nil{
				i.l.Error("rollback error %s",err)
			}
		}else{
			if err := tx.Commit();err !=nil{
				i.l.Error("commit error, %s",err)
			}
		}
	}()
	//插入resource数据
	rstmt, err := tx.Prepare(InsertResourceSQL)
	if err != nil{
		return fmt.Errorf("InsertResourceSQL error,%s",err)
	}
	defer rstmt.Close()
	if _,err:=rstmt.Exec(
	    ins.Vendor, ins.Region, ins.CreateAt, ins.ExpireAt,
        ins.Type, ins.Name, ins.Description, ins.UpdateAt, ins.SyncAt,
        ins.Account, ins.PublicIp,
	);err != nil{
		fmt.Println(err)
	}

	// 调试bug -- begin --
	// ret,err := rstmt.Exec(
	//     ins.Vendor, ins.Region, ins.CreateAt, ins.ExpireAt,
    //     ins.Type, ins.Name, ins.Description, ins.UpdateAt, ins.SyncAt,
    //     ins.Account, ins.PublicIp,
	// )
	// if err !=nil{
	// 	fmt.Println(err)
	// }
	// fmt.Println(ret)
	// 调试bug -- end --




	//插入describe的数据
	dstmt, err := tx.Prepare(InsertDescribeSQL)
	if err != nil{
		return fmt.Errorf("InsertDescribeSQL error,%s",err)
	}
	defer dstmt.Close()
	if _,err:=dstmt.Exec(
	ins.Id,ins.CPU,ins.Memory,ins.GPUAmount,ins.GPUSpec,ins.OSType,ins.OSName,ins.SerialNumber,
	);err != nil{
		fmt.Println(err)
	}
	return nil 
}



